#ifndef __INIT_HPP__
#define __INIT_HPP__

#include <iostream>
#include <fstream>
#include <string>
#include <unordered_map>
#include "log.hpp"


const std::string filename = "./dict.txt";
const std::string sep = ":";


static bool split(std::string &s, std::string *part1, std::string *part2)
{
    auto pos = s.find(sep);
    if(pos == std::string::npos) return false;
    *part1 = s.substr(0, pos);
    *part2 = s.substr(pos + 1);
    return true;
}

class Init
{
public:
    Init()
    {
        std::ifstream ifs(filename);
        if(!ifs.is_open())
        {
            lg(FATAL, "filename open fail...");
            // std::cout << "filename open fail..." << std::endl;
            exit(0);
        }

        std::string line;
        while(getline(ifs, line))  //getline 不止可以从cin读取，fstream是iostream的派生类，向下兼容是完全可以的，读文件，每次读取一行
        {
            std::string part1, part2;
            split(line, &part1, &part2);
            dict.insert({part1, part2});
        }

        ifs.close();
    }
    std::string translation(const std::string &key)
    {
        auto itr = dict.find(key);
        if(itr == dict.end()) return "Unknow";
        else return itr->second;
    } 
    ~Init(){} 
private:
    std::unordered_map<std::string, std::string> dict;
};

#endif


// #pragma once

// #include <iostream>
// #include <string>
// #include <fstream>
// #include <unordered_map>
// #include "log.hpp"

// const std::string dictname = "./dict.txt";
// const std::string sep = ":";

// //yellow:黄色...
// static bool Split(std::string &s, std::string *part1, std::string *part2)
// {
//     auto pos = s.find(sep);
//     if(pos == std::string::npos) return false;
//     *part1 = s.substr(0, pos);
//     *part2 = s.substr(pos+1);
//     return true;
// }

// class Init
// {
// public:
//     Init()
//     {
//         std::ifstream in(dictname);
//         if(!in.is_open())
//         {
//             lg(FATAL, "ifstream open %s error", dictname.c_str());
//             exit(1);
//         }
//         std::string line;
//         while(std::getline(in, line))  
//         {
//             std::string part1, part2;
//             Split(line, &part1, &part2);
//             dict.insert({part1, part2});
//         }
//         in.close();
//     }
//     std::string translation(const std::string &key)
//     {
//         auto iter = dict.find(key);
//         if(iter == dict.end()) return "Unknow";
//         else return iter->second;
//     }
// private:
//     std::unordered_map<std::string, std::string> dict;
// };